In [1]:
#codigo de cabecera --> para ello instalamos geopandas en "open terminal"
import os, geopandas as gpd

# país elegido: 
peru = gpd.read_file(os.path.join("mapasPeru","DEPARTAMENTOS","DEPARTAMENTOS.shp"))
In [2]:
#damos nombres a nuestros shapefiles

ciudades = gpd.read_file(os.path.join("mapasPeru","Cap_Provincia","Cap_Provincia.shp"))

areasUrbanasNacionales = gpd.read_file(os.path.join("mapasPeru","ANP Nacional Definitivas","ANPNacionalDefinitivas.shp"))

areasUrbanasPrivadas = gpd.read_file(os.path.join("mapasPeru","Áreas de Conservación Privada","AreasdeConservacionPrivada.shp"))

UH = gpd.read_file(os.path.join("mapasPeru","file_uh","UH.shp"))

zonaAmortiguamiento = gpd.read_file(os.path.join("mapasPeru","Zonas de Amortiguamiento","ZonasdeAmortiguamiento.shp"))

# "mapasPeru" --> carpeta donde guardamos los archivos .rar y los que descomprimimos
# OJO: la extensión ".shp" es utilizado para almacenar información geográfica y espacial
In [3]:
type(peru)
Out[3]:
geopandas.geodataframe.GeoDataFrame
In [4]:
type(ciudades)
Out[4]:
geopandas.geodataframe.GeoDataFrame
In [5]:
type(areasUrbanasNacionales)
Out[5]:
geopandas.geodataframe.GeoDataFrame
In [6]:
type(areasUrbanasPrivadas)
Out[6]:
geopandas.geodataframe.GeoDataFrame
In [7]:
type(UH)
Out[7]:
geopandas.geodataframe.GeoDataFrame
In [8]:
type(zonaAmortiguamiento)
Out[8]:
geopandas.geodataframe.GeoDataFrame
In [9]:
# dimensiones de "peru"
peru.shape
Out[9]:
(25, 5)
In [10]:
# names
peru.columns

# 'Id' --> identificador único para cada registro de la capa de datos geoespaciales
# 'geometry' --> contiene información geográfica y espacial del país "china", como puntos, líneas o polígonos
Out[10]:
Index(['IDDPTO', 'DEPARTAMEN', 'CAPITAL', 'FUENTE', 'geometry'], dtype='object')
In [11]:
# contenido de "peru"
peru.head()
Out[11]:
IDDPTO DEPARTAMEN CAPITAL FUENTE geometry
0 01 AMAZONAS CHACHAPOYAS INEI POLYGON ((-77.81211 -2.98962, -77.81332 -2.990...
1 02 ANCASH HUARAZ INEI POLYGON ((-77.64692 -8.05086, -77.64669 -8.052...
2 03 APURIMAC ABANCAY INEI POLYGON ((-73.74632 -13.17456, -73.74570 -13.1...
3 04 AREQUIPA AREQUIPA INEI POLYGON ((-71.98109 -14.64062, -71.98093 -14.6...
4 05 AYACUCHO AYACUCHO INEI POLYGON ((-74.34843 -12.17503, -74.35000 -12.1...
In [12]:
# contenido de "ciudades"
ciudades.head()
Out[12]:
Cod_IGN Rasgo_Prin Categoria Nombre Provincia Departa X Y Cod_Provin Cod_Depart geometry
0 CO230 Capital CIUDAD CHIQUIAN BOLOGNESI ANCASH -77.15604 -10.15124 0205 02 POINT (-77.15604 -10.15124)
1 CO230 Capital CIUDAD HUARMEY HUARMEY ANCASH -78.15162 -10.06955 0211 02 POINT (-78.15162 -10.06955)
2 CO230 Capital PUEBLO OCROS OCROS ANCASH -77.39566 -10.40240 0214 02 POINT (-77.39566 -10.40240)
3 CO230 Capital CIUDAD AMBO AMBO HUÁNUCO -76.20437 -10.12965 1002 10 POINT (-76.20437 -10.12965)
4 CO230 Capital PUEBLO JESUS LAURICOCHA HUÁNUCO -76.63042 -10.07898 1010 10 POINT (-76.63042 -10.07898)
In [13]:
# contenido de "areasUrbanasNacionales"
areasUrbanasNacionales.head()
Out[13]:
objectid_1 anp_gid anp_codi anp_cate anp_nomb anp_sect anp_ubpo anp_suleg anp_uicn anp_balec anp_felec anp_balem anp_felem anp_obs met_link anp_orden anp_id geometry
0 17163 1 BP01 Bosque de Protección Aledaño a la Bocatoma del Canal Nuevo Imperial NaN Lima 18.11 VI - Uso sostenible de recursos naturales R.S. N° 0007-1980-AA/DGFF 1980-05-19 NaN NaN NaN NaN 85 85 POLYGON ((-76.21944 -13.04386, -76.21934 -13.0...
1 17219 57 RN13.09 Reserva Nacional Sistema de Islas, Islotes y Puntas Guaneras - ... NaN Ancash 2953.89 VI - Uso sostenible de recursos naturales D.S. N° 024-2009-MINAM 2009-12-31 NaN NaN NaN NaN 53 53 POLYGON ((-78.22908 -9.94976, -78.22902 -9.949...
2 17164 2 BP02 Bosque de Protección Puquio Santa Rosa NaN La Libertad 72.50 VI - Uso sostenible de recursos naturales R.S. N° 0434-1982-AG/DGFF 1982-09-02 NaN NaN NaN NaN 86 86 POLYGON ((-78.72574 -8.60734, -78.72574 -8.607...
3 17165 3 BP03 Bosque de Protección de Pui Pui NaN Junín 60000.00 VI - Uso sostenible de recursos naturales R.S. N° 0042-1985-AG/DGFF 1985-01-31 NaN NaN NaN NaN 87 87 POLYGON ((-74.89181 -11.26586, -74.89166 -11.2...
4 17193 27 RC03 Reserva Comunal Amarakaeri NaN Madre de Dios 402335.62 VI - Uso sostenible de recursos naturales D.S. N° 031-2002-AG 2002-05-09 NaN NaN NaN NaN 75 75 POLYGON ((-71.08318 -12.58558, -71.08371 -12.5...
In [14]:
# contenido de "areasUrbanasPrivadas"
areasUrbanasPrivadas.head()
Out[14]:
objectid_1 anp_gid acp_codi acp_nomb acp_suleg acp_balec acp_felec acp_balem acp_felem acp_fecad acp_ubpo acp_titu acp_tipro acp_tirec acp_pareg acp_obs met_link acp_orden acp_id geometry
0 17538 376 ACP168 Yasgolca-Santa Lucia, Montevideo 4725.69 R.M. N° 065-2023-MINAM 2023-02-22 NaN NaN Perpetuo AMAZONAS Comunidad Campesina Montevideo Comunidad Campesina Perpetuo P.E. N° 02013530 NaN NaN 168 162 POLYGON ((-77.73072 -6.62838, -77.73071 -6.628...
1 17539 378 ACP169 Pampacorral 767.56 R.M. N° 066-2023-MINAM 2023-02-22 NaN NaN 22/02/2033 CUSCO Comunidad Campesina Pampa Corral Comunidad Campesina 10 P.E. N° 11044013 NaN NaN 169 163 POLYGON ((-71.97863 -13.15968, -71.97163 -13.1...
2 17540 377 ACP170 Utco 3060.36 R.M. N° 067-2023-MINAM 2023-02-22 NaN NaN Perpetuo CAJAMARCA Comunidad Campesina de Utco Comunidad Campesina Perpetuo P.E. N° 02286473 NaN NaN 170 164 POLYGON ((-78.00429 -6.91381, -78.00488 -6.914...
3 17405 299 ACP62 Bosques de Neblina y Páramos de Samanga 2888.03 R.M. N° 117-2013-MINAM 2013-04-18 NaN NaN 2023-04-18 PIURA Comunidad Campesina Samanga Comunidad Campesina 10 NaN NaN NaN 62 104 POLYGON ((-79.42841 -4.75096, -79.42883 -4.751...
4 17466 298 ACP61 Bosque Berlín 59.00 R.M. N° 073-2013-MINAM 2013-03-04 NaN NaN 2023-03-04 AMAZONAS José Ricardo Rimarachin Altamirano Privado 10 NaN NaN NaN 61 103 POLYGON ((-78.42162 -5.91087, -78.42121 -5.911...
In [15]:
# contenido de "UH"
UH.head()
Out[15]:
OBJECTID ID NIVEL1 NIVEL2 NIVEL3 NIVEL4 NIVEL5 NIVEL6 NIVEL7 NOMB_UH_N1 ... NOMB_UH_N5 NOMB_UH_N6 NOMB_UH_N7 CODIGO NOMBRE ORDEN AREA_KM2 Shape_Leng Shape_Area geometry
0 132 125 1 13 139 1394 NaN NaN NaN Región Hidrografica del Pacífico ... NaN NaN NaN 1394 Cuenca Tumbes 61 1806.1527 3.353455 0.147947 POLYGON ((-80.43131 -3.51183, -80.43202 -3.511...
1 1 139 4 49 496 4964 NaN NaN NaN Región Hidrográfica del Amazonas ... NaN NaN NaN 4964 Cuenca Tarau 74 2547.2750 3.376721 0.211003 POLYGON ((-72.31743 -10.47817, -72.31814 -10.4...
2 2 140 4 49 496 4969 NaN NaN NaN Región Hidrográfica del Amazonas ... NaN NaN NaN 4969 Intercuenca Alto Yurúa 75 9010.3846 5.095023 0.746001 POLYGON ((-72.17422 -10.00017, -72.17327 -10.0...
3 3 136 4 49 492 4926 49269 NaN NaN Región Hidrográfica del Amazonas ... Alto Acre NaN NaN 49269 Intercuenca Alto Acre 71 2492.3716 3.478442 0.207434 POLYGON ((-69.42633 -11.18493, -69.42708 -11.1...
4 4 137 4 49 492 4928 49289 NaN NaN Región Hidrográfica del Amazonas ... Alto Iaco NaN NaN 49289 Intercuenca Alto Iaco 72 1741.9667 2.487195 0.144711 MULTIPOLYGON (((-70.56941 -10.97065, -70.56955...

5 rows × 23 columns

In [16]:
# contenido de "zonaAmortiguamiento"
zonaAmortiguamiento.head()
Out[16]:
objectid_1 c_nomb anp_codi anp_nomb za_super za_pvpm za_balea za_felea za_balem za_felem za_baler za_feler za_obs g_docreg g_fecreg geometry
0 5840 Reserva Comunal RC04 Ashaninka 325684.030089 2019-2023 R.P. Nº 239-2012-SERNANP 2012-12-28 NaN NaN R.P. N° 034-2019-SERNANP 2019-01-29 Control topologico segùn informe N° 328-2020-S... Informe Nº 238-2020-SERNANP-DDE 2020-06-22 POLYGON ((-73.82264 -12.47341, -73.82234 -12.4...
1 5841 Bosque de Protección BP03 de Pui Pui 45367.201144 2019-2023 R.J. Nº 285-2008 INRENA 2008-10-28 NaN NaN R.P. N° 033-2019-SERNANP 2019-01-29 Control topologico segùn informe N° 328-2020-S... Informe Nº 238-2020-SERNANP-DDE 2020-06-22 POLYGON ((-75.13986 -11.09688, -75.13935 -11.0...
2 5842 Reserva Nacional RN12 Matsés 231397.756087 2023-2027 R.P. Nº 054-2014-SERNANP-J 2014-02-27 NaN NaN R.P N° 320-2022-SERNANP 2022-12-29 Control topologico segùn informe N° 328-2020-S... Informe Nº 238-2020-SERNANP-DDE 2020-06-22 POLYGON ((-73.66013 -4.99800, -73.65788 -4.998...
3 5843 Reserva Nacional RN10 Allpahuayo Mishana 65956.533504 2022-2026 R.J. Nº 159-2007 INRENA 2007-07-24 NaN NaN R.P. N° 082-2022-SERNANP 2022-03-15 Control topologico segùn informe N° 328-2020-S... Informe Nº 238-2020-SERNANP-DDE 2020-06-22 POLYGON ((-73.40232 -3.77420, -73.39253 -3.788...
4 5844 Reserva Nacional RN06 de Salinas y Aguada Blanca 310242.095749 2016-2020 R.J. Nº 087-2007 INRENA 2007-04-26 NaN NaN R.P. N° 257-2016-SERNANP 2016-09-14 Control topologico segùn informe N° 328-2020-S... Informe Nº 238-2020-SERNANP-DDE 2020-06-22 POLYGON ((-71.18976 -15.68114, -71.13361 -15.7...
In [17]:
# tipo de datos de "peru"
peru.info()
<class 'geopandas.geodataframe.GeoDataFrame'>
RangeIndex: 25 entries, 0 to 24
Data columns (total 5 columns):
 #   Column      Non-Null Count  Dtype   
---  ------      --------------  -----   
 0   IDDPTO      25 non-null     object  
 1   DEPARTAMEN  25 non-null     object  
 2   CAPITAL     25 non-null     object  
 3   FUENTE      25 non-null     object  
 4   geometry    25 non-null     geometry
dtypes: geometry(1), object(4)
memory usage: 1.1+ KB
In [18]:
# "folium" --> biblioteca de Python utilizada para crear mapas interactivos y visualizaciones de datos geoespaciales
import folium
In [19]:
# creamos una visualización gráfica de los datos contenidos en el marco de datos "peru"
peru.plot()
Out[19]:
<Axes: >
In [20]:
# creamos una visualización gráfica de los datos contenidos en el marco de datos "ciudades"
ciudades.plot()
Out[20]:
<Axes: >
In [21]:
# creamos una visualización gráfica de los datos contenidos en el marco de datos "areasUrbanasNacionales"
areasUrbanasNacionales.plot()
Out[21]:
<Axes: >
In [22]:
# creamos una visualización gráfica de los datos contenidos en el marco de datos "areasUrbanasPrivadas"
areasUrbanasPrivadas.plot()
Out[22]:
<Axes: >
In [23]:
# creamos una visualización gráfica de los datos contenidos en el marco de datos "UH"
UH.plot()
Out[23]:
<Axes: >
In [24]:
# creamos una visualización gráfica de los datos contenidos en el marco de datos "zonaAmortiguamiento"
zonaAmortiguamiento.plot()
Out[24]:
<Axes: >
In [25]:
peru.plot(facecolor="azure", # color del relleno del polígono (parte interna)
               edgecolor='black', # color de las líneas
               linewidth=0.1) # grosor de las líneas
Out[25]:
<Axes: >
In [26]:
ciudades.plot(marker='.', # tipo de marcador
            color='red', 
            markersize=7,
            alpha=0.3) # transpariencia
Out[26]:
<Axes: >
In [27]:
areasUrbanasNacionales.plot(marker='p', # tipo de marcador
                  color='black', 
                  markersize=3,
                  edgecolor='black',
                  linewidth=1,
                  alpha=0.2)
Out[27]:
<Axes: >
In [28]:
areasUrbanasPrivadas.plot(marker='p', # tipo de marcador
                  color='none', 
                  markersize=2,
                  edgecolor='green',
                  linewidth=1,
                  alpha=0.7)
Out[28]:
<Axes: >
In [29]:
zonaAmortiguamiento.plot(marker='x', # tipo de marcador circular
            color='deeppink', 
            markersize=7, # aumentar tamaño del marcador
            alpha=0.5) # aumentar la transparencia
Out[29]:
<Axes: >
In [30]:
# codigo para empezar a suponerponer los mapas

ciudades = ciudades.to_crs(peru.crs)
areasUrbanasNacionales = areasUrbanasNacionales.to_crs(peru.crs)
areasUrbanasPrivadas = areasUrbanasPrivadas.to_crs(peru.crs)
zonaAmortiguamiento = zonaAmortiguamiento.to_crs(peru.crs)
In [31]:
# comenzamos creando la capa en la parte posterior (la base) y agregar capas en la parte superior
# generamos una visualización espacial en la que superponemos tres capas de información geográfica en un mismo gráfico:

# NOTA: el orden de las líneas y polígonos importa ya que si se superponen unos encima de otros, 
# el que esté debajo no se mostrará, por tanto: es necesario asegurarse de que todos los elementos se superpongan bien

# denominamos a nuestra imagen base como "baseMapa"
baseMapa = peru.plot(facecolor="azure", edgecolor='black', linewidth=0.1, figsize=(12,12))
areasUrbanasNacionales.plot(marker='p', color='black', markersize=3, edgecolor='black', linewidth=1, alpha=0.2, ax=baseMapa)
zonaAmortiguamiento.plot(marker='x', color='deeppink', markersize=7, alpha=0.5, ax=baseMapa)
areasUrbanasPrivadas.plot(marker='p', color='none', markersize=2, edgecolor='green', linewidth=1, alpha=1, ax=baseMapa)
ciudades.plot(marker='.', color='red', markersize=7, alpha=1, ax=baseMapa)

# agregamos título y leyenda a nuestro mapa del país: "Peru"
baseMapa.set_title("Mapa del Perú", fontsize=20)
Out[31]:
Text(0.5, 1.0, 'Mapa del Perú')
In [32]:
# como hemos importado "folium", podemos hacer un mapa interacivo, ya que
# una buena característica sería representar el mapa de forma interactiva:

import folium

m = ciudades.explore(color="red", name="ciudades")

m = areasUrbanasNacionales.explore(m=m, color="black", name="areasUrbanasNacionales")

m = areasUrbanasPrivadas.explore(m=m, color="green", name="areasUrbanasPrivadas")

m = zonaAmortiguamiento.explore(m=m, color="deeppink", name="zonaAmortiguamiento")

# mapa interactivo que permite al usuario activar y desactivar diferentes capas de información en el mapa
folium.LayerControl().add_to(m)
m
Out[32]:
Make this Notebook Trusted to load map: File -> Trust Notebook
In [33]:
lima = peru[peru.DEPARTAMEN=='LIMA']
In [34]:
# podemos mantener las partes de los otros mapas que se cruzan con el subpolígono
ciudades_clipped = gpd.clip(gdf=ciudades, mask=lima)
areasUrbanasNacionales_clipped = gpd.clip(gdf=areasUrbanasNacionales, mask=lima)
areasUrbanasPrivadas_clipped = gpd.clip(gdf=areasUrbanasPrivadas, mask=lima)
zonaAmortiguamiento_clipped = gpd.clip(gdf=zonaAmortiguamiento, mask=lima)

# recortamos los marcos de datos "ciudades", "rios" y "area urbanas", utilizando el polígono de LIMA (lima) como máscara, 
# ya que segun el código anterior, seleccionamos la ciudad de "LIMA"
# esto significa que solo se mantendrán las partes de los marcos de datos que se superponen con el polígono de "LIMA"
In [35]:
baseLima = lima.plot(facecolor="greenyellow", edgecolor='black', linewidth=0.4,figsize=(5,5))
areasUrbanasNacionales_clipped.plot(marker='p', color='black', markersize=3, edgecolor='black', linewidth=1, alpha=0.7, ax=baseLima)
zonaAmortiguamiento_clipped.plot(marker='x', color='deeppink', markersize=7, alpha=1, ax=baseLima)
areasUrbanasPrivadas_clipped.plot(marker='p', color='none', markersize=2, edgecolor='green', linewidth=1, alpha=1, ax=baseLima)
ciudades_clipped.plot(marker='.', color='red', markersize=7, alpha=1, ax=baseLima)

baseLima.set_title("Mapa de Lima", fontsize=20)
Out[35]:
Text(0.5, 1.0, 'Mapa de Lima')
In [36]:
# guardamos el mapa de la ciudad de "lima" como imagen

# superponemos los shapefiles de manera conveniente
baseLima = lima.plot(facecolor="greenyellow", edgecolor='black', linewidth=0.4,figsize=(5,5))
areasUrbanasNacionales_clipped.plot(marker='p', color='black', markersize=3, edgecolor='black', linewidth=1, alpha=0.7, ax=baseLima)
zonaAmortiguamiento_clipped.plot(marker='x', color='deeppink', markersize=7, alpha=1, ax=baseLima)
areasUrbanasPrivadas_clipped.plot(marker='p', color='none', markersize=2, edgecolor='green', linewidth=1, alpha=1, ax=baseLima)
ciudades_clipped.plot(marker='.', color='red', markersize=7, alpha=1, ax=baseLima)

# damos titulo al mapa obtenido
baseLima.set_title("Mapa de Lima", fontsize=20)

# módulo de la biblioteca matplotlib que proporciona una forma conveniente de crear gráficos y visualizaciones en Python
import matplotlib.pyplot as plt

# guardamos nuestro mapa final como "mapaLima"
mapaLima = baseLima

plt.savefig(os.path.join("mapasPeru",'mapaLima.jpg'))
In [37]:
# denominamos a nuestra imagen base como "baseMapa"
baseMapa = peru.plot(facecolor="azure", edgecolor='black', linewidth=0.1, figsize=(12,12))
areasUrbanasNacionales.plot(marker='p', color='black', markersize=3, edgecolor='black', linewidth=1, alpha=0.2, ax=baseMapa)
zonaAmortiguamiento.plot(marker='x', color='deeppink', markersize=7, alpha=0.5, ax=baseMapa)
areasUrbanasPrivadas.plot(marker='p', color='none', markersize=2, edgecolor='green', linewidth=1, alpha=1, ax=baseMapa)
ciudades.plot(marker='.', color='red', markersize=7, alpha=1, ax=baseMapa)

# agregamos título y leyenda a nuestro mapa del país: "Peru"
baseMapa.set_title("Mapa del Perú", fontsize=20)

# módulo de la biblioteca matplotlib que proporciona una forma conveniente de crear gráficos y visualizaciones en Python
import matplotlib.pyplot as plt

# guardamos nuestro mapa final como "mapaLima"
mapaPeru = baseMapa

plt.savefig(os.path.join("mapasPeru",'mapaPeru.jpg'))
In [38]:
# guardamos los marcos de geodatos en un archivo de geopaquete (mapa con los 4 archivos de SHP)
# no hemos cambiado el mapa inicial, pero podríamos exportar los mapas a un tipo de archivo diferente (no shapefiles)

ciudades.to_file(os.path.join("mapasPeru","PeruMapas.gpkg"), layer='ciudades', driver="GPKG")

areasUrbanasNacionales.to_file(os.path.join("mapasPeru","PeruMapas.gpkg"), layer='areasUrbanasNacionales', driver="GPKG")

areasUrbanasPrivadas.to_file(os.path.join("mapasPeru","PeruMapas.gpkg"), layer='areasUrbanasPrivadas', driver="GPKG")

zonaAmortiguamiento.to_file(os.path.join("mapasPeru","PeruMapas.gpkg"), layer='zonaAmortiguamiento', driver="GPKG")
In [41]:
PeruMapas = 'https://github.com/thiagoDali/nuevoPais/raw/main/mapasPeru/PeruMapas.gpkg'
In [42]:
from  fiona import listlayers

listlayers(PeruMapas)
Out[42]:
['ciudades',
 'areasUrbanasNacionales',
 'areasUrbanasPrivadas',
 'zonaAmortiguamiento']
In [43]:
ciudades = gpd.read_file(PeruMapas, layer='ciudades')
areasUrbanasNacionales = gpd.read_file(PeruMapas, layer='areasUrbanasNacionales')
areasUrbanasPrivadas = gpd.read_file(PeruMapas, layer='areasUrbanasPrivadas')
zonaAmortiguamiento = gpd.read_file(PeruMapas, layer='zonaAmortiguamiento')
In [ ]: